package com.jdbc_.preparedstatement;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
import java.util.Scanner;

public class Demo1 {
    // 演示PreparedStatement的使用
    public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入管理员名字：");
        String admin_name = scanner.nextLine();  // 不用next()，因为当它接收到空格时就默认结束了
        System.out.print("请输入管理员密码：");
        String admin_pwd = scanner.nextLine();

        // 读取配置文件信息
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\com\\jdbc_\\mysql.properties"));
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");
        String driver = properties.getProperty("driver");

        // 1、注册驱动
        Class.forName(driver);
        //2、获取连接
        Connection connection = DriverManager.getConnection(url, user, password);

        //3、获取PreparedStatement对象，以执行SQL语句
        // 3.1 采用preparedStatement方式时，必选先组织SQL语句  （?做占位符）
        String sql = "select name,pwd from admin where name=? and pwd=?";
        // 3.2 preparedStatement(String sql)：要求 必须 填入一条SQL语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        // 3.3 用setXxx()方法，给?赋值
        /*
            setXxx(参数1, 参数2)方法有2个参数：
                第1个参数是要设置的SQL语句中的参数的索引（从1开始），表示第几个问号(?)
                第2个参数用来设置的SQL语句中的参数的值
         */
        preparedStatement.setString(1, admin_name);  // 设置第一个问号的值
        preparedStatement.setString(2, admin_pwd);  // 设置第二个问号的值
        // 3.4 执行select语句，要使用executeQuery方法，返回的是ResultSet结果集
        /*
            这里执行查询语句，不能再填入sql，因为preparedStatement(sql)已经执行过一次；
            只有上面的sql语句的问号，本身就填了值，而不是问号，才能executeQuery(sql)。
         */
        ResultSet resultSet = preparedStatement.executeQuery();

        if (resultSet.next()) {
            System.out.println("登录成功");
        } else {
            System.out.println("登录失败");
        }

        // 4、依次关闭连接
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
}
